#!/bin/bash
#
# Script uses clang-format to format all of the source files in a
# default format.
#

# The absolute path of the directory containing this script.
DIR="$( cd "$( dirname "$0" )" && pwd)"
# Define top level project directory
PROJECT_DIR="${DIR}"

METHOD="GIT"
if [ -n "$1" ]; then
 METHOD=$1
fi

# Paths to format
MONITOR=()
MONITOR+=( "${PROJECT_DIR}/Source" )

if [ "$METHOD" == "ALL" ]; then
    # Format all Source files
    for FILE in $(find ${MONITOR[*]} -type f \( -iname "*.mm" -o -iname "*.m" -o -iname "*.h" \))
    do
        clang-format -style=file -i "$FILE" &
    done
elif [ "$METHOD" == "GIT" ]; then
    # Gather all added or modified files from git and format them
    CHANGED_FILES=$(git ls-files --other --modified --exclude-standard | grep ".*[\.m|\.mm|\.h|\.hpp]$")
    for CHANGED_FILE in $CHANGED_FILES
    do
        clang-format -style=file -i "${PROJECT_DIR}/$CHANGED_FILE" &
    done
else
    echo "Usage: $0 [GIT|ALL]";
    echo "GIT: Only format added or modified files"
    echo "ALL: Format all files"
fi


# Wait until all clang-format invoctations are done
wait